from timeit import Timer

import sys
import math


def Problem():
    """
    The n^(th) term of the sequence of triangle numbers is given by, t_(n) 
    = 1/2n(n+1); so the first ten triangle numbers are: 

    1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... 

    By converting each letter in a word to a number corresponding to its 
    alphabetical position and adding these values we form a word value. For 
    example, the word value for SKY is 19 + 11 + 25 = 55 = t_(10). If the 
    word value is a triangle number then we shall call the word a triangle 
    word. 

    Using words.txt (right click and 'Save Link/Target As...'), a 16K text 
    file containing nearly two-thousand common English words, how many are 
    triangle words? 
    """

    #Triangles function
    triangles = [n * (n+1) / 2 for n in range(100)]
    
    
    #Get the words from file
    words = ""
    f = open("../var/problem42.txt")
    try:
            words = f.read()
    finally:
        f.close()

    #Get a list of "word"s
    words = words.split(',')
    words = map(lambda x: x.split('"')[1], words)
    
    #Determine if word is triangle word
    wordsum = lambda s: sum([ord(x) - ord('A') + 1 for x in s])
    words = filter(lambda s: wordsum(s) in triangles, words)


    ans = len(words)

    print "Answer for Problem 42 = %s " % (ans,)





if __name__ == "__main__":
    t = Timer(setup='from __main__ import Problem', stmt='Problem()').timeit(1)
    print "Execution time = %0.3f seconds" %(t,)
